entry: Check first whether the sequence is handled, fetch later the event
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 21 May 2014 12:51:46 +0000 (14:51 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 23 May 2014 17:54:33 +0000 (19:54 +0200)
And always unset/hide the selection popover if unhandled, that means the
sequence went grabbed/claimed somewhere else and cancelled here.

gtk/gtkentry.c

index 0d5f6d85b401e2f3f5af6ebe03e3de56a18e0b4b..1a35d382051abf7b406e8db6a4b6ac13db1990cf 100644 (file)
@@ -4706,6 +4706,13 @@ gtk_entry_drag_gesture_end (GtkGestureDrag *gesture,
   if (priv->magnifier_popover)
     gtk_widget_hide (priv->magnifier_popover);
 
+  /* Check whether the drag was cancelled rather than finished */
+  if (!gtk_gesture_handles_sequence (GTK_GESTURE (gesture), sequence))
+    {
+      gtk_entry_selection_bubble_popup_unset (entry);
+      return;
+    }
+
   event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
   source = gdk_event_get_source_device (event);
   is_touchscreen = (test_touchscreen ||
@@ -4717,10 +4724,6 @@ gtk_entry_drag_gesture_end (GtkGestureDrag *gesture,
   else if (is_touchscreen)
     gtk_entry_selection_bubble_popup_set (entry);
 
-  /* Check whether the drag was cancelled rather than finished */
-  if (!gtk_gesture_handles_sequence (GTK_GESTURE (gesture), sequence))
-    return;
-
   if (in_drag)
     {
       gint tmp_pos = gtk_entry_find_position (entry, priv->drag_start_x);